package es.uned.etsii.si3.taller;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import java.math.BigDecimal;
import java.sql.SQLException;

@DatabaseTable(tableName = "talleres")
public
class Taller extends Persistente {
	public static final String ID_FIELD_NAME = "id";
	public static final String ID_POBLACION_FIELD_NAME = "id_poblacion";
	public static final String ID_PROVINCIA_FIELD_NAME = "id_provincia";
	public static final String NOMBRE_FIELD_NAME = "nombre";
	public static final String CIF_FIELD_NAME = "cif";
	public static final String DIRECCION_FIELD_NAME = "direccion";
	public static final String CODIGOPOSTAL_FIELD_NAME ="codigoPostal";
	public static final String TELEFONO_FIELD_NAME =  "telefono";
	public static final String COSTE_HORA_FIELD_NAME ="costeHora";
	public static final String ACTIVO_NAME = "activo";
	
	@DatabaseField(generatedId = true)
	int id;
	@DatabaseField
	String nombre;
	@DatabaseField
	String cif;
	@DatabaseField
	String direccion;
	@DatabaseField(foreign = true, maxForeignAutoRefreshLevel=5, foreignAutoRefresh=true, columnName = ID_POBLACION_FIELD_NAME)
	Poblacion poblacion;
	@DatabaseField(foreign = true, maxForeignAutoRefreshLevel=5, foreignAutoRefresh=true, columnName = ID_PROVINCIA_FIELD_NAME)
	Provincia provincia;
	@DatabaseField
	String codigoPostal;
	@DatabaseField
	String telefono;
	@DatabaseField
	BigDecimal costeHora;
	@DatabaseField
	boolean activo;

	/**
	 * Crea un objeto Taller a partir de los parámetros indicados
	 * 
	 * @param nombre
	 * @param cif
	 * @param direccion
	 * @param poblacion
	 * @param provincia
	 * @param codigoPostal
	 * @param telefono
	 * @param costeHora
	 * @param activo
	 * @return el objeto
	 * @throws SQLException
	 */
	public
	static Taller crear(String nombre, String cif, String direccion,
			Poblacion poblacion, Provincia provincia, String codigoPostal,String telefono,
			BigDecimal costeHora, boolean activo) throws SQLException
	{
		Taller taller = new Taller();

		taller.setNombre(nombre);
		taller.setCif(cif);
		taller.setDireccion(direccion);
		taller.setPoblacion(poblacion);
		taller.setProvincia(provincia);
		taller.setCodigoPostal(codigoPostal);
		taller.setTelefono(telefono);
		taller.setCosteHora(costeHora);
		taller.setActivo(activo);
		getClassDao(Taller.class).create(taller);

		return taller;
	}

	public
	Taller() {
		// ORM Lite necesita un constructor por defecto
	}

	/**
	 * getters y setters
	 */
	public int        getId()     { return id; }
	public String     getNombre() { return nombre; }
	public String     getCif()    { return cif; }
	public String     getDireccion() { return direccion; }
	public Poblacion  getPoblacion() { return poblacion; }
	public Provincia  getProvincia() { return provincia; }
	public String     getCodigoPostal() { return codigoPostal; }
	public String	  getTelefono() { return telefono; }
	public BigDecimal getCosteHora()    { return costeHora; }
	public boolean    getActivo()       { return activo; }

	public
	void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public
	void setCif(String cif) {
		this.cif = cif;
	}

	public
	void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	public
	void setPoblacion(Poblacion poblacion) {
		this.poblacion = poblacion;
	}

	public
	void setProvincia(Provincia provincia) {
		this.provincia = provincia;
	}

	public
	void setCodigoPostal(String codigoPostal) {
		this.codigoPostal = codigoPostal;
	}

	public
	void setTelefono (String telefono) {
		this.telefono = telefono;
	}
	
	public
	void setCosteHora (BigDecimal costeHora) {
		this.costeHora = costeHora;
	}

	public
	void setActivo(boolean activo) {
		this.activo = activo;
	}

	/**
	 * Permite activar un taller
	 * @throws SQLException
	 */
	public
    void activar() throws SQLException {
		setActivo(true);
		update();
	}

	/**
	 * Permite desactivar un taller
	 * 
	 * @throws SQLException
	 */
	public
	void desactivar() throws SQLException {
		setActivo(false);
		update();
	}
}